
//处理单据数据字段children为0时设为undefined，用于弹框选择单据回显bug
export function getTreeData(data) {
  for (let i = 0; i < data.length; i++) {
    if (data[i].children.length < 1) {
      // children若为空数组，则将children设为undefined
      data[i].children = undefined;
    } else {
      // children若不为空数组，则递归调用 本方法
      getTreeData(data[i].children);
    }
  }
  return data;
}

/**
 * 根据sortId获取级联选择框回显数据
 * data 树形数据
 * id 接收的sortId
 * parentArr 父单据信息
 * childrenArr 子单据信息
 */
export function getEcho(id,data,parentArr,childrenArr) {
 return new Promise((resolve,reject)=>{
  setEcho(id, data, parentArr,childrenArr).then(resId => {
    let changId =null,
    setValue=[];
     changId = resId[0].ancestors;
    if(changId.indexOf(",") > -1){ //是否只有一个单据
     changId = changId.split(",");
     changId.splice(0, 1);
     changId.push(id) //得到单据id
     parentArr = [];
     childrenArr=[];
    changId.forEach(v => { //遍历soreId，得到对应单据
       setEcho( v,data, parentArr,childrenArr).then(value => {
        setValue.push(...value);
       })
     })
    setTimeout(()=>{
      resolve(setValue)
    },0)
    }else{
       let sortValue= [];
        sortValue.push(resId[0])
         resolve(sortValue)
    }
  })
 })
}
//处理根据sortId ，得到单据信息
function setEcho(id,data, parentArr,childrenArr) {
  return new Promise((resolve, reject) => {
    if (data.length > 0) {
      data.forEach((value) => {
         if (value.children !== undefined) {
           setEcho(id,value.children,parentArr,childrenArr);
           if (value.formId == id) {
              childrenArr.push(value);
           }
         }else{
           if (value.formId == id) {
               parentArr.push(value)
           }
         }
      })
    }
    resolve(parentArr.concat(childrenArr))
  })

}
//字符宽度校验
export function isSerial(value) {
  if (value > 10 || value <= 0 || !/^[\u4e00-\u9fa5_0-9]+$/.test(value)) {
    return false
  } else {
    return true
  }
}

//树形上级单据名称
export function supParent(node, parentName) {
  if (node.parent !== null && node.parent.data.formName !== undefined) { //是否存在父节点
    parentName.push(node.parent.data.formName); //存在父节点，获取节点名称添加到数组
    supParent(node.parent, parentName) //递归调用
  }
  return parentName
}

//获取树形当前选中节点
export function getCurrentNode(node, nodeArr) {
  return new Promise((resolve, reject) => {
    if (node.parent !== null) {
      nodeArr.push(node);
      getCurrentNode(node.parent, nodeArr)
    }
    resolve(nodeArr)
  })
}

//筛选树节点状态
export function setCurrentNode(node, currentNode) {
  selectNode(node, currentNode)
}

function selectNode(treeNode, currentNode) {
  if (treeNode.childNodes !== 0) {
    treeNode.childNodes.forEach(value => {
      if (value.childNodes.length !== 0) {
        selectNode(value, currentNode)
      }
      if (currentNode.indexOf(value) > -1) { //遍历节点是否包含点击的节点，包含则改变树组件本身属性
        value.isCurrent = true;
      } else {
        value.isCurrent = false;
      }

    })
  }

}
